import axios from 'axios'
import conf from './conf'

axios.interceptors.request.use(
    config => {
        config.headers['token'] = sessionStorage.getItem('token')
        // console.log(sessionStorage.getItem('token'))
        if (conf.inDevelop) {
            // console.log(config);
        }
        return config
    },
    err => {
        return Promise.reject(err)
    })

const Exports = {
    /**
     * 封装axios，                        参数基本跟jq ajax一致
     * @param {String} type            请求的类型，默认post
     * @param {String} url                请求地址
     * @param {String} time            超时时间
     * @param {Object} data            请求参数
     * @param {String} dataType        预期服务器返回的数据类型，xml html json ...
     * @param {Object} headers            自定义请求headers
     * @param {Function} success        请求成功后，这里会有两个参数,服务器返回数据，返回状态，[data, res]
     * @param {Function} error            发送请求前
     * @param return
     */
    ajax: function (opt) {
        const opts = opt || {}
        if (!opts.url) {
            alert('请填写接口地址')
            return false
        }
        axios({
            method: opts.method || 'post',
            url: opts.url,
            params: opts.params || {},
            data: opts.data || {},
            transformRequest: opts.transformRequest || [],
            /*paramsSerializer: opts.paramsSerializer || {},*/
            headers: opts.headers || {},
            // `baseURL` 将自动加在 `url` 前面，除非 `url` 是一个绝对 URL。
            // 它可以通过设置一个 `baseURL` 便于为 axios 实例的方法传递相对 URL
            baseURL: conf.baseUrl,
            timeout: opts.time || 10 * 1000,
            responseType: opts.dataType || 'json'
        }).then(function (res) {
            if (res.status === 200) {
                if (conf.inDevelop) {
                    console.log(res.data)
                }
                if (opts.success) {
                    opts.success(res.data)
                }
            } else {
                //this.$message(res.message);
                if (conf.inDevelop) {
                    console.log(error)
                }
                opts.error(res.data)
            }
        }).catch(function (error) {
            if (conf.inDevelop) {
                console.log(error)
            }
        })
    },
    /**
     * 封装axios，                        参数基本跟jq ajax一致
     * @param {String} type            请求的类型，默认post
     * @param {String} url                请求地址
     * @param {String} time            超时时间
     * @param {Object} data            请求参数
     * @param {String} dataType        预期服务器返回的数据类型，xml html json ...
     * @param {Object} headers            自定义请求headers
     * @param {Function} success        请求成功后，这里会有两个参数,服务器返回数据，返回状态，[data, res]
     * @param {Function} error            发送请求前
     * @param return
     */
    ajaxWithotToken: function (opt) {
        const opts = opt || {}
        if (!opts.url) {
            alert('请填写接口地址')
            return false
        }
        axios({
            method: opts.method || 'post',
            url: opts.url,
            params: opts.params || {},
            // `baseURL` 将自动加在 `url` 前面，除非 `url` 是一个绝对 URL。
            // 它可以通过设置一个 `baseURL` 便于为 axios 实例的方法传递相对 URL
            baseURL: conf.baseUrl,
            timeout: opts.time || 10 * 1000,
            responseType: opts.dataType || 'json'
        }).then(function (res) {
            if (res.status === 200) {
                if (conf.inDevelop) {
                    console.log(res.data)
                }
                if (opts.success) {
                    opts.success(res.data)
                }
            } else {
                if (conf.inDevelop) {
                    console.log(error)
                }
                opts.error(res.data)
            }
        }).catch(function (error) {
            if (conf.inDevelop) {
                console.log(error)
            }
        })
    },

    ajaxOfIcbc: function (opt) {
        axios.post('http://web.zj.icbc.com.cn/bankruptcy/v1/mobile/pic/getParam', opt.form)
            .then((res) => {
                if (res.status === 200) {
                    opt.success(res.data)
                }
            })
            .catch((err) => {
                if (conf.inDevelop) {
                    console.log(err)
                }
                if (opt.error) {
                    opt.error(err)
                }
            })
    },

    ajaxByForm: function (opt) {
        axios.post(conf.baseUrl + opt.url, opt.form)
            .then((res) => {
                if (res.status === 200) {
                    opt.success(res.data)
                } else {
                    opt.error(res.data.error)
                }
            })
            .catch((err) => {
                if (conf.inDevelop) {
                    console.log(err)
                }
                if (opt.error) {
                    opt.error(err)
                }
            })
    },

    getUrlParam: function (url, paramName) {
        const arrObj = url.split('?')
        if (arrObj.length > 1) {
            const arrParam = arrObj[1].split('&')
            let arr

            for (let i = 0; i < arrParam.length; i++) {
                arr = arrParam[i].split('=')

                if (arr !== null && arr[0] === paramName) {
                    return arr[1]
                }
            }
            return ''
        } else {
            return ''
        }
    },
    formatDateDetail: function (inputTime) {
        let date = new Date(inputTime);
        let y = date.getFullYear();
        let m = date.getMonth() + 1;
        m = m < 10 ? ('0' + m) : m;
        let d = date.getDate();
        d = d < 10 ? ('0' + d) : d;
        let h = date.getHours();
        h = h < 10 ? ('0' + h) : h;
        let minute = date.getMinutes();
        let second = date.getSeconds();
        minute = minute < 10 ? ('0' + minute) : minute;
        second = second < 10 ? ('0' + second) : second;
        return y + '-' + m + '-' + d+' '+h+':'+minute+':'+second;
        },
    formatDate: function (dateValue) {
        const date = new Date(dateValue)
        const separator = '-'
        let month = date.getMonth() + 1
        let strDate = date.getDate()
        if (month >= 1 && month <= 9) {
            month = '0' + month
        }
        if (strDate >= 0 && strDate <= 9) {
            strDate = '0' + strDate
        }
        return date.getFullYear() + separator + month + separator + strDate
    },
}

export default Exports
